from ast import main, mod
from hmac import new
import re
import allure
from functools import wraps
import os
import json
from config.read_config import congfig_read
from common.ReadExcel import ReadExcel

# 定义一个闭包函数，这个可以摘出来放到一个单独文件中，作用是为allure.title ,或者 allure.description,allure.story我们修改用例名称，
# 如果多个设备运行的情况下可以使用“用例名称+设备名称”或者“用例描述”在报告中显示，让我们一眼就知道每个用例是那个设备运行的，
def dynamic_allure_title_and_story():
    def decorator(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            # 获取测试数据
            test_data = kwargs.get('test_data')
            
                # 提取数据
            story = test_data.get('接口名称')
            title = test_data.get('测试用例')
            module = test_data.get('模块')
            xuqiu = test_data.get('TAPD需求链接')
            
            

            # 设置 Allure 动态信息
            if title:
                allure.dynamic.title(f"{title}")

            if story:
                allure.dynamic.story(f"{story}")

            if module:
                allure.dynamic.epic(f"{module}")

            if xuqiu:
                allure.dynamic.link(xuqiu, name='点击跳转:TAPD需求链接')
                
            

            return func(*args, **kwargs)
        return wrapper
    return decorator





#添加测试环境信息
def generate_environment_properties(data):
    # 从excel中要写入的环境信息
    environment_info =  data

    def escape_string(s):
        # 将字符串中的特殊字符转义为 XML 实体
        return s.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;")

    # 使用 open 写入文件，确保编码为 UTF-8
    with open('./temps/environment.xml', 'w', encoding='utf-8') as f:
        # 写入 XML 文件的头部信息
        f.write('<?xml version="1.0" encoding="UTF-8"?>\n')
        f.write('<environment>\n')

        # 写入每一个环境信息为 XML 节点
        for key, value in json.loads(environment_info).items():
            escaped_value = escape_string(value)
            f.write(f'  <parameter>\n')
            f.write(f'    <key>{key}</key>\n')
            f.write(f'    <value>{escaped_value}</value>\n')
            f.write(f'  </parameter>\n')

        # 写入 XML 文件的结束标签
        f.write('</environment>\n')




# 修改总览中 的名称
def modify_summary_json(project_name_value):


    summary_path = os.path.join('report', 'widgets', 'summary.json')

    if not os.path.exists(summary_path):
        print(f"File not found: {summary_path}")
        return
    
    # 读取 JSON 文件
    with open(summary_path, 'r', encoding='utf-8') as file:
        data = json.load(file)
   #从excel中获取要修改的数据信息
    data['reportName'] = project_name_value+"总览"
    
    # 写入修改后的 JSON 文件
    with open(summary_path, 'w', encoding='utf-8') as file:
        json.dump(data, file, ensure_ascii=False, indent=4)
    


